{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Python绘制热力图查看两个分类变量之间的强度分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 热力图(heat map)\n",
    "\n",
    "热力图（或者色块图），由小色块组成的二维图表，其中：\n",
    "* x、y轴可以是分类变量，对应的小方块由连续数值表示颜色强度\n",
    "* 即用两个分类字段确定数值点的位置，用于展示数据的分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "sns.set()\n",
    "sns.set_style('whitegrid', {'font.sans-serif':['simhei', 'Arial']})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实例1：模拟绘制北京景区热度图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>周一</th>\n",
       "      <th>周二</th>\n",
       "      <th>周三</th>\n",
       "      <th>周四</th>\n",
       "      <th>周五</th>\n",
       "      <th>周六</th>\n",
       "      <th>周日</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>天安门</th>\n",
       "      <td>0.204656</td>\n",
       "      <td>0.236214</td>\n",
       "      <td>0.811184</td>\n",
       "      <td>0.753462</td>\n",
       "      <td>0.565150</td>\n",
       "      <td>0.897382</td>\n",
       "      <td>0.797873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>故宫</th>\n",
       "      <td>0.719446</td>\n",
       "      <td>0.986112</td>\n",
       "      <td>0.254386</td>\n",
       "      <td>0.477376</td>\n",
       "      <td>0.046718</td>\n",
       "      <td>0.525897</td>\n",
       "      <td>0.756862</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>奥林匹克森林公园</th>\n",
       "      <td>0.994196</td>\n",
       "      <td>0.367690</td>\n",
       "      <td>0.301299</td>\n",
       "      <td>0.986132</td>\n",
       "      <td>0.162136</td>\n",
       "      <td>0.447963</td>\n",
       "      <td>0.130670</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>八达岭长城</th>\n",
       "      <td>0.356420</td>\n",
       "      <td>0.632623</td>\n",
       "      <td>0.798127</td>\n",
       "      <td>0.721076</td>\n",
       "      <td>0.329415</td>\n",
       "      <td>0.346509</td>\n",
       "      <td>0.401840</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                周一        周二        周三        周四        周五        周六        周日\n",
       "天安门       0.204656  0.236214  0.811184  0.753462  0.565150  0.897382  0.797873\n",
       "故宫        0.719446  0.986112  0.254386  0.477376  0.046718  0.525897  0.756862\n",
       "奥林匹克森林公园  0.994196  0.367690  0.301299  0.986132  0.162136  0.447963  0.130670\n",
       "八达岭长城     0.356420  0.632623  0.798127  0.721076  0.329415  0.346509  0.401840"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(\n",
    "    np.random.rand(4, 7), \n",
    "    index = [\"天安门\", \"故宫\", \"奥林匹克森林公园\", \"八达岭长城\"],\n",
    "    columns = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"]\n",
    ")\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kwYNGqThw4erXr16at++vc/7VqtVFSpUuOjxgoODFRwcnK19/vz5qlOnjpYuXaphw4bJYrHk2P9cevP8fezcuVMDBw5Uu3btdNlll+V63NxSo5GRkQoPD1e9evX0wAMPKCkpSfXq1ZPJZLrouQAAAADFzWNAdURJatCggZYuXarNmzcrOjpajRo1kiRVr179okmKDRs2FPnYAReEnTx5UhkZGYqJifG21ahRQ6dPn85x+65du+r222/X119/nS0IM5lMCg0NvejxrFarzGbfhGNKSoree+89TZs2TTNmzNAHH3ygAQMG5Gv8W7Zs0eDBg9W7d2+NGjUqX4HTG2+8kWM2rn79+t7/3aRJE9WpUydfYwAAAACKi7uIGa2iCA0NVYcOHfx+3IALwo4fP65KlSqpUqVK3raaNWvqyJEjufZ5+umnFRQUpEmTJmn16tWy2WySstaLjRkzRsHBwXK73XI6nZowYYKaNm2qkSNH6pprrvHuY/z48QoODtYTTzyhF198Ua1bt1aTJk00bNgw9enTRzExMeratetFx/7ZZ59pwoQJevzxx9W3b98ct9m3b59mz56t3377TU6nUydPnlRwcLBuu+02jR8/XpL0ww8/6LXXXtOnn36qzMxMZWZmKjw8PN/XEAAAAEDhBVwQtn//fp8MkJS1MC8hISHbtsePH5fJZJLZbJbJZFK3bt3UqlUrWSwWHTt2TGPGjNGwYcMUFhbmDcKqV68uKWvt2flZqpCQENlsNr3zzjtas2aNZs6cqdjYWH3++ef697//raFDh+rmm2/WuHHjFB4eLo/H4w32zomOjtZ//vOfbMGax+NRRkaGQkNDFRERoauuukoJCQm64oordOWVV2r37t0ymUyyWrP+uStUqKDTp0/LarVqwYIFCg0NVc+ePYvl+gIAAAAFYdR0RCMFXBC2ceNGNWzY0KetYcOG+uijj7Jt27dvXx05ckTp6emaMWOGOnbs6H3vq6++UuXKlXXjjTfmeJxzwds5ZrNZhw8f1rfffqspU6aocePGat++vT7++GMNHz5cNptN8+bNU7ly5fTVV1/p8ccf99lfbGxsnue2bds2VapUSXFxcVq2bJmaN2+uG264Qb/99psWLFigBQsWSJI++ugjJScnS5JWrFihGjVqEIQBAADAEEUtsFEaBVQQ5nK5tHnzZt1zzz0+7S1btlRycrL+/PNPn7Viy5YtkyS1atUqW3GNL7/8Uh07dtR7772nJk2a5Osp2dWqVdPMmTN18OBBffvtt+rYsaNCQkL07bffKjo6Wu+9954k6YYbbtDq1asVHBystLQ0denSRQsWLFCVKlX0xhtv6PDhw5owYYJ3v06nUw6Hw5vpupDT6dQdd9yhZ599Vq1bt1ZMTIwyMzN15MgR7du3T3369MnfBQQAAACKGUFYGZeQkCC73e6zVkvKmp7XsGFDrVy5Ug8++GCe+/nll1/0zTffaNGiRVq+fLkGDRqk999/X82bN8+zb0pKihYvXuwTMK1Zs0b9+/dXmzZtJEnh4eHeNVrntitXrpyio6N111136Z///KeOHTumBg0a5Ou8U1NTFR4eLqvVKqfTqbCwMNWoUUPff/+9jhw5ku16AAAAAP7iZjpi2TZ37lx16tRJYWFh2d7r3r27PvvsMz3wwAPZqhme7+jRo3r00Uc1YMAA1atXT/Xq1dPx48f18MMPa/bs2dnWm12oTZs23mBLknbv3q0NGzbkK/iTskppduvWTaNHj9bHH3+c47mck5iYqIyMDP3++++6+uqrJWVlxWw2m5o2baq33npLrVu3zrPCIwAAAIDiEzAPa05KStJXX32l+++/P8f34+Li9Mcff2jx4sW57mPr1q2666671LBhQw0bNszbPm7cODVp0kQDBw7U0aNHJfkuMHS5XEpJSfH+fOrUKU2dOlUOh0NvvPGGHnrooXxVJ/z99981ZcoUPfPMM0pJSdHgwYP1119/ZTvPIUOGaMOGDfr555/l8Xj0448/qmHDhtq0aZMsFouCgoLUvn17HTx4UL17987zuAAAAEBJMephzUYKiCAsIyNDo0ePVteuXdWqVasct6lYsaL69eunCRMm+JSrnzdvntLS0jRlyhT99ddf6tKli6ZNm+YzndBisWjy5Mm6/fbbvQ9vzszM1Lx587RixQpNnz5dK1askMvlkiSlpaVp5cqV6tWrl7Zs2aK7774717G73W5JWcU0brvtNq1du1Zut1vvvvuu9u3bp7i4OC1fvty7/eWXX67w8HDNmTNHCxcu1F9//aVq1aopPDxcffr00a233qqUlBS99dZbstls+v3337V06dIcC5MAAAAAJc3j8RT6VVqV+SAsPT1djz76qE6cOKGnn376otsOHjxYkZGRevjhh5WcnKxX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",
      "text/plain": [
       "<Figure size 1000x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 4))\n",
    "sns.heatmap(df, annot=True, fmt = \".2f\", cmap = \"coolwarm\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实例2：绘制泰坦尼克事件与存亡变量的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取并合并泰坦尼克数据\n",
    "df = pd.concat(\n",
    "    [\n",
    "        pd.read_csv(\"./datas/titanic/titanic_train.csv\"),\n",
    "        pd.read_csv(\"./datas/titanic/titanic_test.csv\")\n",
    "    ]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1       0.0       3   \n",
       "1            2       1.0       1   \n",
       "2            3       1.0       3   \n",
       "3            4       1.0       1   \n",
       "4            5       0.0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 1309 entries, 0 to 417\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  1309 non-null   int64  \n",
      " 1   Survived     891 non-null    float64\n",
      " 2   Pclass       1309 non-null   int64  \n",
      " 3   Name         1309 non-null   object \n",
      " 4   Sex          1309 non-null   object \n",
      " 5   Age          1046 non-null   float64\n",
      " 6   SibSp        1309 non-null   int64  \n",
      " 7   Parch        1309 non-null   int64  \n",
      " 8   Ticket       1309 non-null   object \n",
      " 9   Fare         1308 non-null   float64\n",
      " 10  Cabin        295 non-null    object \n",
      " 11  Embarked     1307 non-null   object \n",
      "dtypes: float64(3), int64(4), object(5)\n",
      "memory usage: 132.9+ KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pands把字符串类型的列，变成分类数字编码\n",
    "for field in [\"Sex\", \"Cabin\", \"Embarked\"]:\n",
    "    df[field] = df[field].astype(\"category\").cat.codes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 1309 entries, 0 to 417\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  1309 non-null   int64  \n",
      " 1   Survived     891 non-null    float64\n",
      " 2   Pclass       1309 non-null   int64  \n",
      " 3   Name         1309 non-null   object \n",
      " 4   Sex          1309 non-null   int8   \n",
      " 5   Age          1046 non-null   float64\n",
      " 6   SibSp        1309 non-null   int64  \n",
      " 7   Parch        1309 non-null   int64  \n",
      " 8   Ticket       1309 non-null   object \n",
      " 9   Fare         1308 non-null   float64\n",
      " 10  Cabin        1309 non-null   int16  \n",
      " 11  Embarked     1309 non-null   int8   \n",
      "dtypes: float64(3), int16(1), int64(4), int8(2), object(2)\n",
      "memory usage: 107.4+ KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>1</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>-1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>106</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>-1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1       0.0       3   \n",
       "1            2       1.0       1   \n",
       "2            3       1.0       3   \n",
       "\n",
       "                                                Name  Sex   Age  SibSp  Parch  \\\n",
       "0                            Braund, Mr. Owen Harris    1  22.0      1      0   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...    0  38.0      1      0   \n",
       "2                             Heikkinen, Miss. Laina    0  26.0      0      0   \n",
       "\n",
       "             Ticket     Fare  Cabin  Embarked  \n",
       "0         A/5 21171   7.2500     -1         2  \n",
       "1          PC 17599  71.2833    106         0  \n",
       "2  STON/O2. 3101282   7.9250     -1         2  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>PassengerId</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.005007</td>\n",
       "      <td>-0.038354</td>\n",
       "      <td>0.013406</td>\n",
       "      <td>0.028814</td>\n",
       "      <td>-0.055224</td>\n",
       "      <td>0.008942</td>\n",
       "      <td>0.031428</td>\n",
       "      <td>-0.012096</td>\n",
       "      <td>-0.048530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Survived</th>\n",
       "      <td>-0.005007</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.338481</td>\n",
       "      <td>-0.543351</td>\n",
       "      <td>-0.077221</td>\n",
       "      <td>-0.035322</td>\n",
       "      <td>0.081629</td>\n",
       "      <td>0.257307</td>\n",
       "      <td>0.277885</td>\n",
       "      <td>-0.176509</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <td>-0.038354</td>\n",
       "      <td>-0.338481</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.124617</td>\n",
       "      <td>-0.408106</td>\n",
       "      <td>0.060832</td>\n",
       "      <td>0.018322</td>\n",
       "      <td>-0.558629</td>\n",
       "      <td>-0.534483</td>\n",
       "      <td>0.192867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex</th>\n",
       "      <td>0.013406</td>\n",
       "      <td>-0.543351</td>\n",
       "      <td>0.124617</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.063645</td>\n",
       "      <td>-0.109609</td>\n",
       "      <td>-0.213125</td>\n",
       "      <td>-0.185523</td>\n",
       "      <td>-0.126367</td>\n",
       "      <td>0.104818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>0.028814</td>\n",
       "      <td>-0.077221</td>\n",
       "      <td>-0.408106</td>\n",
       "      <td>0.063645</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.243699</td>\n",
       "      <td>-0.150917</td>\n",
       "      <td>0.178740</td>\n",
       "      <td>0.190984</td>\n",
       "      <td>-0.089292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>-0.055224</td>\n",
       "      <td>-0.035322</td>\n",
       "      <td>0.060832</td>\n",
       "      <td>-0.109609</td>\n",
       "      <td>-0.243699</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.373587</td>\n",
       "      <td>0.160238</td>\n",
       "      <td>-0.005685</td>\n",
       "      <td>0.067802</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>0.008942</td>\n",
       "      <td>0.081629</td>\n",
       "      <td>0.018322</td>\n",
       "      <td>-0.213125</td>\n",
       "      <td>-0.150917</td>\n",
       "      <td>0.373587</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.221539</td>\n",
       "      <td>0.029582</td>\n",
       "      <td>0.046957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.031428</td>\n",
       "      <td>0.257307</td>\n",
       "      <td>-0.558629</td>\n",
       "      <td>-0.185523</td>\n",
       "      <td>0.178740</td>\n",
       "      <td>0.160238</td>\n",
       "      <td>0.221539</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.340217</td>\n",
       "      <td>-0.241442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cabin</th>\n",
       "      <td>-0.012096</td>\n",
       "      <td>0.277885</td>\n",
       "      <td>-0.534483</td>\n",
       "      <td>-0.126367</td>\n",
       "      <td>0.190984</td>\n",
       "      <td>-0.005685</td>\n",
       "      <td>0.029582</td>\n",
       "      <td>0.340217</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.126482</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Embarked</th>\n",
       "      <td>-0.048530</td>\n",
       "      <td>-0.176509</td>\n",
       "      <td>0.192867</td>\n",
       "      <td>0.104818</td>\n",
       "      <td>-0.089292</td>\n",
       "      <td>0.067802</td>\n",
       "      <td>0.046957</td>\n",
       "      <td>-0.241442</td>\n",
       "      <td>-0.126482</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             PassengerId  Survived    Pclass       Sex       Age     SibSp  \\\n",
       "PassengerId     1.000000 -0.005007 -0.038354  0.013406  0.028814 -0.055224   \n",
       "Survived       -0.005007  1.000000 -0.338481 -0.543351 -0.077221 -0.035322   \n",
       "Pclass         -0.038354 -0.338481  1.000000  0.124617 -0.408106  0.060832   \n",
       "Sex             0.013406 -0.543351  0.124617  1.000000  0.063645 -0.109609   \n",
       "Age             0.028814 -0.077221 -0.408106  0.063645  1.000000 -0.243699   \n",
       "SibSp          -0.055224 -0.035322  0.060832 -0.109609 -0.243699  1.000000   \n",
       "Parch           0.008942  0.081629  0.018322 -0.213125 -0.150917  0.373587   \n",
       "Fare            0.031428  0.257307 -0.558629 -0.185523  0.178740  0.160238   \n",
       "Cabin          -0.012096  0.277885 -0.534483 -0.126367  0.190984 -0.005685   \n",
       "Embarked       -0.048530 -0.176509  0.192867  0.104818 -0.089292  0.067802   \n",
       "\n",
       "                Parch      Fare     Cabin  Embarked  \n",
       "PassengerId  0.008942  0.031428 -0.012096 -0.048530  \n",
       "Survived     0.081629  0.257307  0.277885 -0.176509  \n",
       "Pclass       0.018322 -0.558629 -0.534483  0.192867  \n",
       "Sex         -0.213125 -0.185523 -0.126367  0.104818  \n",
       "Age         -0.150917  0.178740  0.190984 -0.089292  \n",
       "SibSp        0.373587  0.160238 -0.005685  0.067802  \n",
       "Parch        1.000000  0.221539  0.029582  0.046957  \n",
       "Fare         0.221539  1.000000  0.340217 -0.241442  \n",
       "Cabin        0.029582  0.340217  1.000000 -0.126482  \n",
       "Embarked     0.046957 -0.241442 -0.126482  1.000000  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算不同变量之间两两相关系数\n",
    "df.corr(numeric_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\anaconda3\\Lib\\site-packages\\seaborn\\utils.py:80: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  fig.canvas.draw()\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\anaconda3\\Lib\\site-packages\\IPython\\core\\events.py:82: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "d:\\anaconda3\\Lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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AAAAZFMuG6ZtNBo1YMAAubm5afny5frf//6nfv36afXq1cqbN69FdfznP/9Rvnz5FBkZad9g/yX3/TxxH4oXL64SJUqYOtQ3l50+fdr0d0ZGhjp06KA9e/ZkWd+3336rlStXavXq1Vq1apXpsVs3nT59WnXq1NHy5cu1c+dOVa1aVf3795fBYJAknTx5UkOGDNHWrVv15Zdf6pdfftHs2bNttLcAAAAA8GDYt2+ffv31V02aNEnlypVTx44dVbZsWW3atMmi8jt37tSXX36pSZMmycPDw87RmnugMtV30r17dw0YMEB169ZVWFiYlixZovPnz6tChQpZlk1KSpIkJSYm6sqVK3rvvfckZf6KImU+H3v69OmaNm2aypQpI3d3d7Ph31OnTlWxYsXUr18/eXh4yN3d3ZTlBgAAAABHcbPjbakRERH3fH/z5s23LTt48KBKlSqlsmXLmpaFhoYqOjpaHTp0uGd9SUlJevPNNxUeHq7o6GglJiaajVa2twe+U92kSRO98847mj17tmJjY1W5cmV99NFHCgwMzLLsk08+qR07dujpp59WwYIF9eKLL+rAgQM6cOCA6tatq06dOunEiRMaOnSorly5ojJlyigqKsp03/TEiRM1YcIEdenSRQaDQeHh4erfv7+9dxkAAAAAnEpiYqJKly5ttix//vw6ePBglmVv9vXCw8N15swZzZs3T5UqVdLMmTNzZE6rB6JTHR4ersOHD9/1/bZt22Z5H/U777xz27K8efPeNly7W7dupn+7u7tr6NChGjp06B3rLFOmjObPn3/P7QIAAABAjnOz3z3Vd8pEZ8XT09PsNl5J8vX1VXJy8j3LpaWlaenSpXrhhRc0YsQISZmjlZs2bapNmzapZcuW2Y4lux6oe6oBAAAAAM4nMDBQly5dMluWlJR0W0f73+Lj43X9+nWzIeeFCxdWiRIldPz4cbvE+m90qgEAAADA1bi72+9lhZo1a+rQoUNKSEgwLYuOjlZwcPA9ywUFBd2W0U5NTdWFCxdUtGhRq2LJLjrVAAAAAACHKl++vCpUqKCoqCgZDAZFR0dr48aNatasmQwGgxISEu446bOXl5fatm2rqKgo/f777zp9+rRGjx4tHx+fLCdMsxU61QAAAADgatzc7Pey0uTJk7Vt2zbVq1dPzz77rDp27KjGjRvr3Llzql27to4cOXLHcqNHj1bdunX1yiuvqG3btjp69KjmzZsnf39/q2PJjgdiojIAAAAAgOXs+Ugta1WuXFnr1q3TL7/8oqCgIFWpUkWSVLJkyXtOTO3r66sRI0aYJirLaXSqAQAAAAC5Qp48edSwYUNHh5EtdKoBAAAAwNW45b5MtbOiJQEAAAAAsBKZagAAAABwNe7WTygGc2SqAQAAAACwEplqAAAAAHAxbtxTbTO0JAAAAAAAViJTDQAAAACuhnuqbYZONQAAAAC4GoZ/2wwtCQAAAACAlchUAwAAAICrcWP4t62QqQYAAAAAwEpkqgEAAADA1biTX7UVOtVOJK93hqNDcAoHf/7d0SE4jZd/3+noEJzC+ar1HB2C0+j726+ODsEpHInN4+gQnML5i+mODsFptI9s5OgQnIJ/XjoRloq/8ZejQwCcBp1qAAAAAHA1zP5tM7QkAAAAAABWIlMNAAAAAK7Gndm/bYVONQAAAAC4GoZ/2wwtCQAAAACAlchUAwAAAICrcWP4t62QqQYAAAAAwEpkqgEAAADA1biTX7UVWhIAAAAAACuRqQYAAAAAV8M91TZDphoAAAAAACuRqQYAAAAAV8Nzqm2GTjUAAAAAuBomKrMZWhIAAAAAACuRqQYAAAAAV8NEZTZDphoAAAAAACuRqQYAAAAAV8NEZTZDS1ogJiZGkZGRCg0NVfPmzbV48WJHhwQAAAAAyAXoVGchLS1NvXr1UrVq1bR+/XoNHjxYEydO1M8//+zo0AAAAADAOm5u9nu5GDrVWYiJiVFsbKy6deumokWLqk2bNnr66ad16tQpR4cGAAAAAHAwOtVZCA4Olp+fn2bMmKHExERJ0rhx49S5c2dJ0vfff69OnTopNDRUPXr00MmTJ01l+/Tpo759+0qSjEajnnnmGY0aNSrndwIAAAAAbuXubr+Xi3G9Pc6mwMBAzZ49Wzt27FDjxo01btw4xcXFSZIOHjyovn376oknntDatWtVokQJ9erVSwaDQVJm53vv3r3avn27li9frgsXLmjYsGGO3B0AAAAAkNHNzW4vV8Ps3xaoX7++Nm7cqPXr12vOnDlas2aNFi5cqC+//FKVK1fWSy+9JEkaNGiQGjdurAMHDqhatWoqWrSohg8frokTJyopKUmTJ0+Wv7+/g/cGAAAAAGArZKqzEBcXp5iYGHl5ealdu3ZasWKFypUrp3fffVfnzp3TkSNHFBYWprCwMLVt21aSdObMGVP5J598UgkJCcqfP7+aNGniqN0AAAAAgH+4udvv5WLIVGdh3bp1+uyzz7RlyxZJko+Pjxo0aKAtW7YoJCREjz32mIYPH25aPykpScWKFTP9PXfuXBUpUkSJiYn66quvTPdiAwAAAACcn+v9jJBNjRo10oULFzR79mzFxcVp7969WrZsmSIiItSlSxft2rVLR44ckZeXl3777Td16tRJJ06ckCTt379fH330kSZNmqSxY8fqnXfe0enTpx27QwAAAABAptpmyFRnoXz58po9e7ZmzJihjz76SEFBQerUqZP69OkjT09PTZ06VdOmTdOxY8dUvHhxTZ48WTVq1FBqaqqGDRum7t27KyQkRJIUERGhESNG6LPPPpO7C86KBwAAAAAPGjrVFmjSpMld74du3LixGjdufNtyHx8frV271mzZe++9Z5f4AAAAACA7XHGWbnshXQoAAAAAgJXIVAMAAACAq3HBe5/thU41AAAAALgahn/bDD9PAAAAAABgJTLVAAAAAOBqeBqRzdCSAAAAAABYiU41AAAAALgYo5ub3V7WunTpkvr166fQ0FB16tRJhw4dynYdx48fV40aNXTmzBmr48guOtUAAAAAAIcyGo0aMGCA4uPjtXz5cvXo0UP9+vXTtWvXLK4jIyNDw4YNU3Jysh0jvR2dagAAAABwNW7u9ntZYd++ffr11181adIklStXTh07dlTZsmW1adMmi+v44IMPcrxDLdGpBgAAAAA42MGDB1WqVCmVLVvWtCw0NFTR0dEWl58/f77ee+89e4V4V8z+DQAAAAAuxmhlRtkSERER93x/8+bNty1LTExU6dKlzZblz59fBw8ezHJ7aWlpeuONN/Tqq6+qcuXK2QvWBuhUAwAAAICruY8JxezB09NT3t7eZst8fX0tGs4dFRWlQoUKKTIy0k7R3RudagAAAACAzdwpE52VwMBAXbp0yWxZUlLSbR3tf9uzZ49WrFihlStXys1BPxRwTzUAAAAAuBijm7vdXtaoWbOmDh06pISEBNOy6OhoBQcH37Pc119/raSkJLVt21ZhYWEKCwuTJLVv317z5s2zKpbsIlMNAAAAAHCo8uXLq0KFCoqKitLo0aN14MABbdy4UXPmzJHBYFBSUpLy5s0rDw8Ps3L/93//p/79+5sti4iI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mzbds1xaWpoWLVqkV199VXXq1FFoaKief/55LVmyxKo4rOEymeotW7bIz89Px44d06hRo2QwGDRmzBhHhwUAAAAAD5SIiIh7vr958+bblh08eFClSpVS2bJlTctCQ0MVHR2tDh063LWu48eP6/r162rUqJFZudWrV1sRuXUe+Ez1Tf7+/goMDFStWrX04osvauPGjY4OCQAAAAAcIrfdU52YmKjSpUubLcufP79iY2OzLOfl5aXg4GDTsoCAgCzL2ZLLZKpv5enpqRs3bkiSvvjiC82fP1+XLl1ShQoVNGbMGFWrVk1S5tDx559/Xr/88ovee+89bdy4UXPnzlX16tUlZf6aMmnSJP3+++8qUqSIXnnlFT355JNm21qwYIHmz5+vGzdu6IUXXlD//v1zdF8BAAAAICfdKROdFU9PT3l7e5st8/X1VXJycpblfHx8sl3OllwmU31TXFycvvrqK9WvX1979uzR2LFjNWzYMG3atEl169bVyJEjbyvzyiuvyMfHR1OnTlX58uUlSRcuXNALL7yg6tWra926dXrttdc0YsQIRUdHm8r98MMP2rNnj5YsWaK+fftq5syZOnPmTI7tKwAAAADcidHoZreXNQIDA3Xp0iWzZUlJSbd1tO9ULikpyawTbUk5W3KZTHXTpk1lMBiUkpKixo0ba9SoUfLz89OOHTvk5+enP/74QwkJCYqJibmtbGhoqAYPHmy2bNWqVQoMDNTQoUPl5uamNm3ayNvbW/nz5zetYzQa9d577ylv3rzq3r27pkyZonPnzqlkyZJ2318AAAAAuBvDfTz6yh5q1qypcePGKSEhQQEBAZKk6Ohos2Hdd1KqVCkVLlxYe/bsUePGjS0uZ0su06levHix/P39VbhwYdOvFhcvXtRbb72lffv2qVy5cipatKgMBsNtZfv06XPbsrNnz6pUqVJyc/vnl5jmzZubrRMaGmqa/v3mNo338+A2AAAAAHgAlS9fXhUqVFBUVJRGjx6tAwcOaOPGjZozZ44MBoOSkpKUN29eeXh4mJVzd3dX27ZtNWPGDNWsWVNpaWlauHChWrRokWOxu8zw7+LFi6tEiRJmwwCmT5+ua9eu6ccff9TSpUvVsWPHO5a903PRihcvfttQ7hEjRuiTTz4x/e3v72+j6AEAAADAdnLbRGWSNHnyZG3btk316tXTs88+q44dO6px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yy+/aOjQoSpfvrzq1q1r9+3XqlVLe/bssft2cgrHp205+vh0Njt37lRycrK2bt2qV1991dHhOIQlx4w1nzsP6rHIZ5b1tmzZIn9/f9Pfbm5uDowmd3j77be1b98+ffLJJ/L09NSAAQPk7++vl156ySb179mzR35+fjapyx4WL16shx9+2PS3t7e3A6MBHIdMtRPw9/dXYGCgatWqpRdffFEbN250dEhOLSYmRrGxserWrZuKFi2qNm3a6Omnn9apU6dyZPuenp4KCAjIkW3lBI5P23L08elstm7dqoYNG+qPP/5QXFyco8NxCEuOGWs+dx7UY5HPLOv5+/srICDA9Lq1g+2K4uLi9M0332j8+PGqVq2aqlSpom7dumnZsmU220ZAQIA8PXNvDixv3rxmx4Svr6+jQwIcgk61k/H09NSNGzckSV988YUiIiJUvXp1PfXUU4qOjjatl5SUpKFDhyo8PFxhYWF6/fXXlZSUZHr/l19+0VNPPaXq1auradOmWrp0qdl2VqxYobZt26pWrVrq27evLl26ZHqvUqVK+u6779SvXz/VqFFDjz/+uNm2T506pa5duyo0NFR9+vTRsGHDVKtWLYvqvjnU5sKFCxo8eLDq1Klj9v69nDt3Tj179lRoaKg6d+6sc+fO3XG94OBg+fn5acaMGUpMTJQkjRs3Tp07d77jkPFbh0feHO50/PhxRUVFqUmTJlq7dq0kadu2bapTp47S09NNZadMmaKBAwea1XenYZgZGRlq2LChNmzYYFp25MgRhYSEKD4+XpJ04cIFvf766woPD1dERISWL19uWtdgMGj69Olq0KCBGjRooJUrV1rUZrZ26/G5Zs0atW3bVqGhoXr22WfNjpGs7N69W506dVL16tUVERGhFStWmL0/Z84cNW7cWNWrV9dzzz2nmJgY03txcXHq27evatWqpfDwcL399ttm/ye53b2OT0n6/vvv1alTJ4WGhqpHjx46efKkqWyfPn3Ut29fSZLRaNQzzzyjUaNG5fxO5KDvv/9eTzzxhMqUKaOtW7eaLW/ZsqVq166tMWPGqEePHurZs6ekzAxsVFSUHnvsMdWtW1eTJ082HbfOKKtjRrr3bSeHDh3SE088oVq1amnQoEH666+/LKp3+PDh6t27t3r27KmaNWvq2Wef1aFDh+y5qzZn6XfqzfZLSkrSmDFjVL9+ff3vf/8zvX/w4EF1795doaGhatWq1W2fWZK0YMECNWjQQHXq1NHs2bPtvm856X7a7vjx4+rVq5fCwsL0+OOPa/v27Y7YBavs2bNHnp6eqlmzpmlZ3bp11aRJE0n3bhdJ2rFjh5o1a2b6rkpNTb1tG3caznzzWmX16tVq1qyZatasqdGjR9thD7Pv5nXSlClTVK9ePY0ePVrjxo1TrVq19P7775vWu9e+Z3UNUKlSJf3888/65JNP1KJFC3388cd3jOWnn35SWFiYfvzxR9Oy6Ohode3aVTVr1lSnTp3M/k+uXr2qQYMGqVatWmrTpo0OHjxoo1aBK6BT7UTi4uL01VdfqX79+tqzZ4/Gjh2rYcOGadOmTapbt67ZfSwfffSRfvvtNy1ZskRLly7ViRMntGDBAtP7r7/+uqpVq6aNGzdq5MiRevvtt3X69GlJmcO73nzzTfXt21erVq3SjRs3NHjwYLNYJkyYoIYNG+rbb79VYGCg3nvvPdN7I0eOVNmyZbVu3TplZGQoKSlJ3377rcV1p6amqmfPnipfvrxmzpxpcXZl8ODBysjI0MqVKxUZGalVq1bdcb3AwEDNnj1bO3bsUOPGjTVu3LhsZ7hGjx6t2NhYTZo0SeHh4ZKkhg0bysPDw2yI5ebNm9WuXbss6/Pw8FCbNm20efNms7INGzZUYGCgDAaD+vXrp8uXL2vZsmUaPny43nrrLe3evVuStGzZMn3++eeaMmWKPvvsM7POeU659fj8/vvvNWzYMPXt21fr169XaGioXn75ZaWkpGRZz/Xr19W3b1/Vr19fmzdv1vDhwzVy5EhdvHhRUuaX5KxZszRlyhStXbtWZcqU0dixY03l3333XcXHx2vFihX65JNPtGXLlrseC7nRvY7PgwcPqm/fvnriiSe0du1alShRQr169ZLBYJCU2eHZu3evtm/fruXLl+vChQsaNmyYI3fHrg4dOqRz584pLCxMtWvX1rZt2yRl/qg4aNAgvfzyy1q6dKm2bt2qZs2aafLkyZKkqKgoffPNN5o+fboWLFigDRs26MMPP3Tgntyf+/1M++abbzRy5EgtXbpUMTExmjBhgsX1bt++XS1atNDq1atVpkwZ9evX744dg9woO9+pN73yyivy8fHR1KlTVb58eUmZP3i+8MILql69utatW6fXXntNI0aMMLtY/+GHH7Rnzx4tWbJEffv21cyZM+0654W9NG3aVGFhYQoLC1OvXr0k6b7a7vr163rppZfk7++vVatWqXv37urfv7/Zj4W5WWxsrAoUKGCWSa5ataqGDx9uUbusWrVKM2fO1Lx587RlyxbNnTvX4m3/+eefWrJkiT788EONHz9eX375pemaICd17drVdEyEhYXp/PnzkjJ/7B8wYIC+/PJLlSpVSs8995xWr15tKne3fc/qGuCm2bNna+fOnRo1apQef/zx2+Lau3evBg0apKlTp6phw4aSMs/5yMhIPfroo1q7dq0aNWqkXr16mX40HD9+vGJiYrR06VKNGjVK33zzjV3aDA+m3DueBCZNmzaVwWBQSkqKGjdurFGjRsnPz087duyQn5+f/vjjDyUkJJhl67y9vWU0GnXjxg09/PDD+u9//2tWp4+PjzIyMuTp6anmzZsrOjpaXl5ekqQlS5YoIiLC1Bns16+funbtqsuXL6tgwYKSpIiICHXt2lWS1L59e82bN89U94EDB9S7d28VK1ZMERER+vTTTxUcHGxx3ZcuXdKrr76qLl26WNxG586d06+//qply5bpoYce0kMPPaT169ebsrz/Vr9+fW3cuFHr16/XnDlztGbNGi1cuNDi7RUpUsTshwQpM+Nxs2Ncr149/fnnn4qPj9djjz1mUZ3t27dXz549lZ6eLk9PT23atMmUWdu/f7/279+vVatWmfYvPDxca9euVZ06dbRmzRq1a9fO9MUxaNAgU8bS3u50fI4YMUIdOnQw/T/3799fISEhFmWMvb29tWHDBuXPn18nTpxQbGys0tPTdfLkSRUuXFg+Pj6SMrONhQsX1sSJE83q9fHxkcFgkMFgUNWqVbV582a5uzvX74d3Oz6//PJLVa5c2XSv3qBBg9S4cWMdOHBA1apVU9GiRTV8+HBNnDhRSUlJmjx58gM9PHPr1q0KDg5WqVKlVLt2bb311ltKSUnR8ePHlZSUpA4dOsjb21u1atXS8ePHVaRIERmNRi1dulRDhgxRjRo1JEldunTR6tWrNWDAAMfu0H242zHzyCOPZFn26aefVr169SRldnzeeOMNTZkyRe7u7lnWW6NGDT377LOSpGHDhqlu3brav3+/wsLC7Lez98ma79SbQkNDb/sheNWqVQoMDNTQoUPl5uamNm3ayNvbW/nz5zetYzQa9d577ylv3rzq3r27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",
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 6))\n",
    "sns.heatmap(df.corr(numeric_only=True), annot=True, fmt = \".2f\", cmap = \"coolwarm\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
